home *** CD-ROM | disk | FTP | other *** search
/ Tech Win 1995 November / CD [TECH_B].bin / tech_b / delphi / trial / disk4 / doc.pak / DB.INT < prev    next >
Encoding:
Text File  |  1995-08-08  |  19.5 KB  |  599 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995 Borland International        }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DB;
  11.  
  12. {$N+,P+,S-}
  13.  
  14. interface
  15.  
  16. uses SysUtils, WinTypes, WinProcs, DbiTypes, DbiProcs, DbiErrs, Classes;
  17.  
  18. const
  19.  
  20. { TDataSet maximum number of record buffers }
  21.  
  22.   dsMaxBufferCount = 1024;
  23.  
  24. { TDBDataSet flags }
  25.  
  26.   dbfOpened     = 0;
  27.   dbfPrepared   = 1;
  28.   dbfExecSQL    = 2;
  29.   dbfTable      = 3;
  30.   dbfFieldList  = 4;
  31.   dbfIndexList  = 5;
  32.   dbfStoredProc = 6;
  33.   dbfExecProc   = 7;
  34.  
  35. type
  36.  
  37. { Forward declarations }
  38.  
  39.   TDBError = class;
  40.   TSession = class;
  41.   TDatabase = class;
  42.   TFieldDefs = class;
  43.   TDataset = class;
  44.   TDBDataset = class;
  45.   TField = class;
  46.   TDataSource = class;
  47.   TDataLink = class;
  48.  
  49. { Generic types }
  50.  
  51.   TSymbolStr = string[DBIMAXNAMELEN];
  52.   TMessageStr = string[DBIMAXMSGLEN];
  53.  
  54.   PFieldDescList = ^TFieldDescList;
  55.   TFieldDescList = array[0..1023] of FLDDesc;
  56.  
  57.   PIndexDescList = ^TIndexDescList;
  58.   TIndexDescList = array[0..63] of IDXDesc;
  59.  
  60. { Exception classes }
  61.  
  62.   EDatabaseError = class(Exception);
  63.  
  64.   EDBEngineError = class(EDatabaseError)
  65.   public
  66.     constructor Create(ErrorCode: DBIResult);
  67.     destructor Destroy; override;
  68.     property ErrorCount: Integer;
  69.     property Errors[Index: Integer]: TDBError;
  70.   end;
  71.  
  72. { BDE error information type }
  73.  
  74.   TDBError = class
  75.   public
  76.     constructor Create(Owner: EDBEngineError; ErrorCode: DBIResult;
  77.       NativeError: Longint; Message: PChar);
  78.     property Category: Byte;
  79.     property ErrorCode: DBIResult;
  80.     property SubCode: Byte;
  81.     property Message: TMessageStr;
  82.     property NativeError: Longint;
  83.   end;
  84.  
  85. { TLocale }
  86.  
  87.   TLocale = Pointer;
  88.  
  89. { TSession }
  90.  
  91.   TPasswordEvent = procedure(Sender: TObject; var Continue: Boolean);
  92.  
  93.   TCallBack = record
  94.     Data: Longint;
  95.     BufLen: Word;
  96.     Buffer: Pointer;
  97.     ChainedFunc: Pointer;
  98.   end;
  99.  
  100.   TSession = class(TComponent)
  101.   public
  102.     constructor Create(AOwner: TComponent);
  103.     destructor Destroy; override;
  104.     procedure AddPassword(const Password: string);
  105.     procedure CloseDatabase(Database: TDatabase);
  106.     procedure DropConnections;
  107.     function FindDatabase(const DatabaseName: string): TDatabase;
  108.     procedure GetAliasNames(List: TStrings);
  109.     procedure GetAliasParams(const AliasName: string; List: TStrings);
  110.     procedure GetDatabaseNames(List: TStrings);
  111.     procedure GetDriverNames(List: TStrings);
  112.     procedure GetDriverParams(const DriverName: string; List: TStrings);
  113.     function GetPassword: Boolean;
  114.     procedure GetTableNames(const DatabaseName, Pattern: string;
  115.       Extensions, SystemTables: Boolean; List: TStrings);
  116.     procedure GetStoredProcNames(const DatabaseName: string; List: TStrings);
  117.     function OpenDatabase(const DatabaseName: string): TDatabase;
  118.     procedure RemoveAllPasswords;
  119.     procedure RemovePassword(const Password: string);
  120.     property DatabaseCount: Integer;
  121.     property Databases[Index: Integer]: TDatabase;
  122.     property Handle: HDBISES;
  123.     property KeepConnections: Boolean default True;
  124.     property Locale: TLocale;
  125.     property NetFileDir: string;
  126.     property PrivateDir: string;
  127.     property OnPassword: TPasswordEvent;
  128.   end;
  129.  
  130. { TParamList }
  131.  
  132.   TParamList = class(TObject)
  133.   public
  134.     constructor Create(Params: TStrings);
  135.     destructor Destroy; override;
  136.     property Buffer: PChar;
  137.     property FieldCount: Integer;
  138.     property FieldDescs: PFieldDescList;
  139.   end;
  140.  
  141. { TDatabase }
  142.  
  143.   TTransIsolation = (tiDirtyRead, tiReadCommitted, tiRepeatableRead);
  144.  
  145.   TLoginEvent = procedure(Database: TDatabase;
  146.     LoginParams: TStrings) of object;
  147.  
  148.   TDatabase = class(TComponent)
  149.   protected
  150.     procedure Loaded; override;
  151.   public
  152.     constructor Create(AOwner: TComponent); override;
  153.     destructor Destroy; override;
  154.     procedure Close;
  155.     procedure CloseDatasets;
  156.     procedure Commit;
  157.     procedure Open;
  158.     procedure Rollback;
  159.     procedure StartTransaction;
  160.     procedure ValidateName(const Name: string);
  161.     property DatasetCount: Integer;
  162.     property Datasets[Index: Integer]: TDBDataset;
  163.     property Handle: HDBIDB;
  164.     property IsSQLBased: Boolean;
  165.     property Locale: TLocale;
  166.     property Temporary: Boolean;
  167.   published
  168.     property AliasName: TSymbolStr;
  169.     property Connected: Boolean default False;
  170.     property DatabaseName: TFileName;
  171.     property DriverName: TSymbolStr;
  172.     property KeepConnection: Boolean default True;
  173.     property LoginPrompt: Boolean default True;
  174.     property Params: TStrings;
  175.     property TransIsolation: TTransIsolation default tiReadCommitted;
  176.     property OnLogin: TLoginEvent;
  177.   end;
  178.  
  179. { TDataSetDesigner }
  180.  
  181.   TDataEvent = (deFieldChange, deRecordChange, deDataSetChange,
  182.     deDataSetScroll, deLayoutChange, deUpdateRecord, deUpdateState,
  183.     deCheckBrowseMode, dePropertyChange, deFieldListChange,
  184.     deFocusControl);
  185.  
  186.   TDataSetDesigner = class(TObject)
  187.   public
  188.     constructor Create(DataSet: TDataSet);
  189.     destructor Destroy; override;
  190.     procedure BeginDesign;
  191.     procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
  192.     procedure EndDesign;
  193.     property DataSet: TDataSet;
  194.   end;
  195.  
  196. { TFieldDef }
  197.  
  198.   TFieldClass = class of TField;
  199.  
  200.   TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
  201.     ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
  202.     ftBytes, ftVarBytes, ftBlob, ftMemo, ftGraphic);
  203.  
  204.   TFieldDef = class
  205.   public
  206.     constructor Create(Owner: TFieldDefs; const Name: string;
  207.       DataType: TFieldType; Size: Word; Required: Boolean; FieldNo: Integer);
  208.     destructor Destroy; override;
  209.     function CreateField(Owner: TComponent): TField;
  210.     property DataType: TFieldType;
  211.     property FieldClass: TFieldClass;
  212.     property FieldNo: Integer;
  213.     property Name: string;
  214.     property Required: Boolean;
  215.     property Size: Word;
  216.   end;
  217.  
  218. { TFieldDefs }
  219.  
  220.   TFieldDefs = class
  221.   public
  222.     constructor Create(DataSet: TDataSet);
  223.     destructor Destroy; override;
  224.     procedure Add(const Name: string; DataType: TFieldType; Size: Word;
  225.       Required: Boolean);
  226.     procedure AddFieldDesc(FieldDesc: FLDDesc; Required: Boolean;
  227.       FieldNo: Word);
  228.     procedure Assign(FieldDefs: TFieldDefs);
  229.     procedure Clear;
  230.     function Find(const Name: string): TFieldDef;
  231.     function IndexOf(const Name: string): Integer;
  232.     procedure Update;
  233.     property Count: Integer;
  234.     property Items[Index: Integer]: TFieldDef; default;
  235.   end;
  236.  
  237. { TDataSet }
  238.  
  239.   TBookmark = Pointer;
  240.  
  241.   PBufferList = ^TBufferList;
  242.   TBufferList = array[0..dsMaxBufferCount - 1] of PChar;
  243.  
  244.   TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert,
  245.     dsSetKey, dsCalcFields);
  246.  
  247.   TGetMode = (gmCurrent, gmNext, gmPrior);
  248.  
  249.   TResyncMode = set of (rmExact, rmCenter);
  250.  
  251.   TKeyIndex = (kiLookup, kiRangeStart, kiRangeEnd, kiCurRangeStart,
  252.     kiCurRangeEnd, kiSave);
  253.  
  254.   PKeyBuffer = ^TKeyBuffer;
  255.   TKeyBuffer = record
  256.     Modified: Boolean;
  257.     Exclusive: Boolean;
  258.     FieldCount: Integer;
  259.     Data: record end;
  260.   end;
  261.  
  262.   TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;
  263.  
  264.   TDataSet = class(TComponent)
  265.     procedure BeginInsertAppend;
  266.     procedure BindFields(Binding: Boolean);
  267.     procedure CheckCanModify;
  268.     procedure CheckFieldName(const FieldName: string);
  269.     procedure CheckRequiredFields;
  270.     procedure CheckSetKeyMode;
  271.     procedure CopyBuffer(SourceIndex, DestIndex: Integer);
  272.     procedure CreateFields;
  273.     procedure DestroyFields;
  274.     procedure EndInsertAppend;
  275.     function FieldByNumber(FieldNo: Integer): TField;
  276.     procedure FreeFieldBuffers;
  277.     function GetActive: Boolean;
  278.     procedure GetCalcFields(Index: Integer);
  279.     function GetField(Index: Integer): TField;
  280.     function GetFieldCount: Integer;
  281.     procedure GetIndexInfo;
  282.     function GetNextRecord: Boolean;
  283.     function GetNextRecords: Integer;
  284.     function GetPriorRecord: Boolean;
  285.     function GetPriorRecords: Integer;
  286.     function GetRecord(Index: Integer; GetMode: TGetMode): DBIResult;
  287.     function GetRecordCount: Longint;
  288.     function InitKeyBuffer(Buffer: PKeyBuffer): PKeyBuffer;
  289.     procedure InitRecord(Buffer: PChar);
  290.     procedure InternalClose;
  291.     procedure InternalOpen;
  292.     procedure MoveBuffer(CurIndex, NewIndex: Integer);
  293.     procedure PostKeyBuffer(Commit: Boolean);
  294.     procedure RemoveDataSource(DataSource: TDataSource);
  295.     procedure RemoveField(Field: TField);
  296.     procedure SetActive(Value: Boolean);
  297.     procedure SetBufferCount(Value: Integer);
  298.     procedure SetBufListSize(Value: Integer);
  299.     procedure SetCurrentRecord(Index: Integer);
  300.     procedure SetField(Index: Integer; Value: TField);
  301.     procedure SetFieldDefs(Value: TFieldDefs);
  302.     procedure SetState(Value: TDataSetState);
  303.     procedure UpdateBufferCount;
  304.     procedure UpdateFieldDefs;
  305.   protected
  306.     procedure CheckInactive;
  307.     procedure ClearBuffers;
  308.     procedure CloseCursor; virtual;
  309.     function CreateHandle: HDBICur; virtual;
  310.     procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
  311.     procedure DoAfterCancel; virtual;
  312.     procedure DoAfterClose; virtual;
  313.     procedure DoAfterDelete; virtual;
  314.     procedure DoAfterEdit; virtual;
  315.     procedure DoAfterInsert; virtual;
  316.     procedure DoAfterOpen; virtual;
  317.     procedure DoAfterPost; virtual;
  318.     procedure DoBeforeCancel; virtual;
  319.     procedure DoBeforeClose; virtual;
  320.     procedure DoBeforeDelete; virtual;
  321.     procedure DoBeforeEdit; virtual;
  322.     procedure DoBeforeInsert; virtual;
  323.     procedure DoBeforeOpen; virtual;
  324.     procedure DoBeforePost; virtual;
  325.     procedure DoOnCalcFields; virtual;
  326.     procedure DoOnNewRecord; virtual;
  327.     function GetDataSource: TDataSource; virtual;
  328.     function GetIndexField(Index: Integer): TField;
  329.     function GetIndexFieldCount: Integer;
  330.     function GetKeyBuffer(KeyIndex: TKeyIndex): PKeyBuffer;
  331.     function GetKeyExclusive: Boolean;
  332.     function GetKeyFieldCount: Integer;
  333.     procedure InitFieldDefs; virtual;
  334.     procedure Loaded; override;
  335.     procedure OpenCursor; virtual;
  336.     procedure PrepareCursor; virtual;
  337.     function ResetCursorRange: Boolean;
  338.     function SetCursorRange: Boolean;
  339.     procedure SetIndexField(Index: Integer; Value: TField);
  340.     procedure SetKeyBuffer(KeyIndex: TKeyIndex; Clear: Boolean);
  341.     procedure SetKeyExclusive(Value: Boolean);
  342.     procedure SetKeyFieldCount(Value: Integer);
  343.     procedure SetKeyFields(KeyIndex: TKeyIndex;
  344.       const Values: array of const);
  345.     procedure SetLinkRanges(MasterFields: TList);
  346.     procedure SetName(const Value: TComponentName); override;
  347.     procedure SwitchToIndex(IndexName, TagName: PChar);
  348.     procedure WriteComponents(Writer: TWriter); override;
  349.     property InfoQueryMode: Boolean;
  350.   public
  351.     constructor Create(AOwner: TComponent); override;
  352.     destructor Destroy; override;
  353.     function ActiveBuffer: PChar;
  354.     procedure Append;
  355.     procedure AppendRecord(const Values: array of const);
  356.     procedure Cancel;
  357.     procedure CheckBrowseMode;
  358.     procedure ClearFields;
  359.     procedure Close;
  360.     procedure CursorPosChanged;
  361.     procedure Delete;
  362.     procedure DisableControls;
  363.     procedure Edit;
  364.     procedure EnableControls;
  365.     function FieldByName(const FieldName: string): TField;
  366.     function FindField(const FieldName: string): TField;
  367.     procedure First;
  368.     procedure FreeBookmark(Bookmark: TBookmark);
  369.     function GetBookmark: TBookmark;
  370.     function GetCurrentRecord(Buffer: PChar): Boolean;
  371.     procedure GetFieldNames(List: TStrings);
  372.     procedure GotoBookmark(Bookmark: TBookmark);
  373.     procedure Insert;
  374.     procedure InsertRecord(const Values: array of const);
  375.     function IsLinkedTo(DataSource: TDataSource): Boolean;
  376.     procedure Last;
  377.     procedure MoveBy(Distance: Integer);
  378.     procedure Next;
  379.     procedure Open;
  380.     procedure Post;
  381.     procedure Prior;
  382.     procedure Refresh;
  383.     procedure Resync(Mode: TResyncMode);
  384.     procedure SetFields(const Values: array of const);
  385.     procedure UpdateCursorPos;
  386.     procedure UpdateRecord;
  387.     property BOF: Boolean;
  388.     property CanModify: Boolean;
  389.     property DataSource: TDataSource;
  390.     property DefaultFields: Boolean;
  391.     property Designer: TDataSetDesigner;
  392.     property EOF: Boolean;
  393.     property FieldCount: Integer;
  394.     property FieldDefs: TFieldDefs;
  395.     property Fields[Index: Integer]: TField;
  396.     property Handle: HDBICur;
  397.     property Modified: Boolean;
  398.     property RecordCount: Longint;
  399.     property RecordSize: Word;
  400.     property State: TDataSetState;
  401.     property Locale: TLocale;
  402.   published
  403.     property Active: Boolean default False;
  404.     property AutoCalcFields: Boolean default True;
  405.     property BeforeOpen: TDataSetNotifyEvent;
  406.     property AfterOpen: TDataSetNotifyEvent;
  407.     property BeforeClose: TDataSetNotifyEvent;
  408.     property AfterClose: TDataSetNotifyEvent;
  409.     property BeforeInsert: TDataSetNotifyEvent;
  410.     property AfterInsert: TDataSetNotifyEvent;
  411.     property BeforeEdit: TDataSetNotifyEvent;
  412.     property AfterEdit: TDataSetNotifyEvent;
  413.     property BeforePost: TDataSetNotifyEvent;
  414.     property AfterPost: TDataSetNotifyEvent;
  415.     property BeforeCancel: TDataSetNotifyEvent;
  416.     property AfterCancel: TDataSetNotifyEvent;
  417.     property BeforeDelete: TDataSetNotifyEvent;
  418.     property AfterDelete: TDataSetNotifyEvent;
  419.     property OnNewRecord: TDataSetNotifyEvent;
  420.     property OnCalcFields: TDataSetNotifyEvent;
  421.   end;
  422.  
  423. { TDBDataSet }
  424.  
  425.   TUpdateMode = (upWhereAll, upWhereChanged, upWhereKeyOnly);
  426.   TDBFlags = set of 0..15;
  427.  
  428.   TDBDataSet = class(TDataSet)
  429.   protected
  430.     procedure CloseCursor; override;
  431.     procedure Disconnect; virtual;
  432.     procedure OpenCursor; override;
  433.     procedure SetDBFlag(Flag: Integer; Value: Boolean); virtual;
  434.     property DBFlags: TDBFlags;
  435.     property UpdateMode: TUpdateMode default upWhereAll;
  436.   public
  437.     property Database: TDatabase;
  438.     property DBHandle: HDBIDB;
  439.     property DBLocale: TLocale;
  440.   published
  441.     property DatabaseName: TFileName;
  442.   end;
  443.  
  444. { TDataSource }
  445.  
  446.   TDataChangeEvent = procedure(Sender: TObject; Field: TField) of object;
  447.  
  448.   TDataSource = class(TComponent)
  449.   public
  450.     constructor Create(AOwner: TComponent); override;
  451.     destructor Destroy; override;
  452.     procedure Edit;
  453.     function IsLinkedTo(DataSet: TDataSet): Boolean;
  454.     property State: TDataSetState;
  455.   published
  456.     property AutoEdit: Boolean default True;
  457.     property DataSet: TDataSet;
  458.     property Enabled: Boolean default True;
  459.     property OnStateChange: TNotifyEvent;
  460.     property OnDataChange: TDataChangeEvent;
  461.     property OnUpdateData: TNotifyEvent;
  462.   end;
  463.  
  464. { TField }
  465.  
  466.   TFieldNotifyEvent = procedure(Sender: TField) of object;
  467.   TFieldGetTextEvent = procedure(Sender: TField; var Text: string;
  468.     DisplayText: Boolean) of object;
  469.   TFieldSetTextEvent = procedure(Sender: TField; const Text: string) of object;
  470.   TFieldRef = ^TField;
  471.  
  472.   TField = class(TComponent)
  473.   protected
  474.     procedure AccessError(const TypeName: string);
  475.     procedure CheckInactive;
  476.     procedure Change; virtual;
  477.     procedure DataChanged;
  478.     procedure FreeBuffers; virtual;
  479.     function GetAsBoolean: Boolean; virtual;
  480.     function GetAsDateTime: TDateTime; virtual;
  481.     function GetAsFloat: Double; virtual;
  482.     function GetAsInteger: Longint; virtual;
  483.     function GetAsString: string; virtual;
  484.     function GetCanModify: Boolean;
  485.     function GetDefaultWidth: Integer; virtual;
  486.     procedure GetText(var Text: string; DisplayText: Boolean); virtual;
  487.     function HasParent: Boolean; override;
  488.     procedure PropertyChanged(LayoutAffected: Boolean);
  489.     procedure ReadState(Reader: TReader); override;
  490.     procedure SetAsBoolean(Value: Boolean); virtual;
  491.     procedure SetAsDateTime(Value: TDateTime); virtual;
  492.     procedure SetAsFloat(Value: Double); virtual;
  493.     procedure SetAsInteger(Value: Longint); virtual;
  494.     procedure SetAsString(const Value: string); virtual;
  495.     procedure SetDataType(Value: TFieldType);
  496.     procedure SetSize(Value: Word);
  497.     procedure SetText(const Value: string); virtual;
  498.   public
  499.     constructor Create(AOwner: TComponent); override;
  500.     destructor Destroy; override;
  501.     procedure Assign(Source: TPersistent); override;
  502.     procedure AssignValue(const Value: TVarRec);
  503.     procedure Clear; virtual;
  504.     procedure FocusControl;
  505.     function GetData(Buffer: Pointer): Boolean;
  506.     procedure SetData(Buffer: Pointer);
  507.     function IsValidChar(InputChar: Char): Boolean; virtual;
  508.     property AsBoolean: Boolean;
  509.     property AsDateTime: TDateTime;
  510.     property AsFloat: Double;
  511.     property AsInteger: Longint;
  512.     property AsString: string;
  513.     property CanModify: Boolean;
  514.     property DataSet: TDataSet;
  515.     property DataSize: Word;
  516.     property DataType: TFieldType;
  517.     property DisplayName: PString;
  518.     property DisplayText: string;
  519.     property EditMask: string;
  520.     property EditMaskPtr: PString;
  521.     property FieldNo: Integer;
  522.     property IsIndexField: Boolean;
  523.     property IsNull: Boolean;
  524.     property Size: Word;
  525.     property Text: string;
  526.   published
  527.     property Alignment: TAlignment default taLeftJustify;
  528.     property Calculated: Boolean default False;
  529.     property DisplayLabel: string;
  530.     property DisplayWidth: Integer;
  531.     property FieldName: string;
  532.     property Index: Integer;
  533.     property ReadOnly: Boolean default False;
  534.     property Required: Boolean default False;
  535.     property Visible: Boolean default True;
  536.     property OnChange: TFieldNotifyEvent;
  537.     property OnGetText: TFieldGetTextEvent;
  538.     property OnSetText: TFieldSetTextEvent;
  539.     property OnValidate: TFieldNotifyEvent;
  540.   end;
  541.  
  542. { TDataLink }
  543.  
  544.   TDataLink = class(TPersistent)
  545.   protected
  546.     procedure ActiveChanged; virtual;
  547.     procedure CheckBrowseMode; virtual;
  548.     procedure DataSetChanged; virtual;
  549.     procedure DataSetScrolled(Distance: Integer); virtual;
  550.     procedure FocusControl(Field: TFieldRef); virtual;
  551.     procedure EditingChanged; virtual;
  552.     procedure LayoutChanged; virtual;
  553.     procedure RecordChanged(Field: TField); virtual;
  554.     procedure UpdateData; virtual;
  555.   public
  556.     constructor Create;
  557.     destructor Destroy; override;
  558.     function Edit: Boolean;
  559.     procedure UpdateRecord;
  560.     property Active: Boolean;
  561.     property ActiveRecord: Integer;
  562.     property BufferCount: Integer;
  563.     property DataSet: TDataSet;
  564.     property DataSource: TDataSource;
  565.     property Editing: Boolean;
  566.     property ReadOnly: Boolean;
  567.     property RecordCount: Integer;
  568.   end;
  569.  
  570. const
  571.   dsEditModes = [dsEdit, dsInsert, dsSetKey];
  572.  
  573. const
  574.   Null = TField(nil);
  575.  
  576. function AnsiToNative(Locale: TLocale; const AnsiStr: string;
  577.   NativeStr: PChar; MaxLen: Word): PChar;
  578. procedure NativeToAnsi(Locale: TLocale; NativeStr: PChar;
  579.   var AnsiStr: string);
  580. procedure AnsiToNativeBuf(Locale: TLocale; Source, Dest: PChar; Len: Word);
  581. procedure NativeToAnsiBuf(Locale: TLocale; Source, Dest: PChar; Len: Word);
  582. function ExtractFieldName(const Fields: string; var Pos: Integer): string;
  583.  
  584. procedure RegisterFields(const FieldClasses: array of TFieldClass);
  585.  
  586. procedure DatabaseError(const Message: string);
  587. procedure DBError(Ident: Word);
  588. procedure DBErrorFmt(Ident: Word; const Args: array of const);
  589. procedure DbiError(ErrorCode: DBIResult);
  590. procedure Check(Status: DBIResult);
  591.  
  592. var
  593.   Session: TSession;
  594.  
  595. const
  596.   RegisterFieldsProc: procedure(const FieldClassess: array of TFieldClass) = nil;
  597.  
  598. implementation
  599.